package saxion.sportvereniging.gui;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Scanner;

import saxion.sportvereniging.SportVerenigingFacade;
import saxion.sportvereniging.Team;
import saxion.sportvereniging.groep.*;
import saxion.sportvereniging.reservering.Reservering;
import saxion.sportvereniging.reservering.VastgoedReserveren;
import saxion.sportvereniging.vastgoed.Vastgoed;

public class MainView {

	private SportVerenigingFacade sportvereniging;

	private Scanner scanner;

	public MainView(SportVerenigingFacade sportvereniging) {
		this.sportvereniging = sportvereniging;

		scanner = new Scanner(System.in);
	}

	public void start() {
		boolean loop = true;
		while (loop) {
			System.out.println("---=sportvereniging=---");
			System.out.println("1) Vereninging");
			System.out.println("2) Financiën");
			System.out.println("3) Reserveringen");
			System.out.println("4) Leden, Groepen en Teams");
			System.out.println("5) Exit");

			switch (scanner.nextInt()) {
			case 1:
				vereningingMenu();
				break;
			case 2:
				financieMenu();
				break;
			case 3:
				reserveringMenu();
				break;
			case 4:
				ledenMenu();
			case 5:
				loop = false;
			default:
				loop = true;
				break;
			}
		}
	}

	private void financieMenu() {
		
		System.out.println("---=Financiën=---");
		System.out.println("1) Inkomsten Contributie");
		System.out.println("2) Inkomsten Vastgoed");
		System.out.println("3) Uitgaven Vastgoed");
		
		switch(scanner.nextInt()) {
		case 1:
			showContributie();
			break;
		case 2:
			showInkomstenVastgoed();
			break;
		case 3:
			showUitgavenVastgoed();
			break;
		}
	}

	private void showUitgavenVastgoed() {
		System.out.println("Uitgaven vastgoed: " + sportvereniging.getKostenVastgoed());		
	}

	private void showInkomstenVastgoed() {
		System.out.println("Inkomsten vastgoed: " + sportvereniging.getInkomstenVastgoed());		
	}

	private void showContributie() {
		System.out.println("Contributie inkomsten: " + sportvereniging.getContributie());
	}

	private void ledenMenu() {
		System.out.println("---=Leden en Groepen=---");
		System.out.println("1) Leden Lijst");
		System.out.println("2) Lid Toevoegen");
		System.out.println("3) Groep Toevoegen aan Lid");
		System.out.println("4) Team Lijst");
		System.out.println("5) Voeg team toe");
		System.out.println("6) Voeg lid toe aan team");

		switch (scanner.nextInt()) {
		case 1:
			showLeden();
			break;
		case 2:
			addLid();
			break;
		case 3:
			addGroepaanLid();
			break;
		case 4:
			showTeams();
			break;
		case 5:
			voegTeamToe();
			break;
		case 6:
			voegLidToeAanTeam();
			break;
		}

	}

	private void voegTeamToe() {
		System.out.println("Typ een naam in voor een team");
		
		String naam = scanner.next();
		
		Team team = new Team(naam);
		sportvereniging.addTeam(team);
		
	}

	private void voegLidToeAanTeam() {
		ArrayList<Lid> leden = sportvereniging.getLeden();
		int i = 1;
		System.out.println("Kies een lid op nr");
		for (Lid lid : leden) {
			System.out.println("Nr: " + i + " " + lid.getOmschrijving());
			i++;
		}
		int nrLid = scanner.nextInt();

		System.out.println("Kies een Team op nr");
		i = 1;
		ArrayList<Team> teams = sportvereniging.getTeams();
		for (Team team : teams) {
			System.out.println("Nr: " + i + " " + team.getNaam());
			i++;
		}

		int nrTeam = scanner.nextInt();

		sportvereniging.getTeams().get(nrTeam - 1)
				.addLid(sportvereniging.getLeden().get(nrLid - 1));
	}

	private void showTeams() {
		ArrayList<Team> teams = sportvereniging.getTeams();

		System.out.println("Teams");
		for (Team team : teams) {
			System.out.println(team.toString());
		}

	}

	private void addGroepaanLid() {
		ArrayList<Lid> leden = sportvereniging.getLeden();
		int i = 1;
		System.out.println("Kies een lid op nr");
		for (Lid lid : leden) {
			System.out.println("Nr: " + i + " " + lid.getOmschrijving());
			i++;
		}
		int nrLid = scanner.nextInt();

		System.out.println("Kies een Groep op nr");
		i = 1;
		ArrayList<String> groepen = sportvereniging.getGroepen();
		for (String groep : groepen) {
			System.out.println("Nr: " + i + " " + groep);
			i++;
		}

		int nrGroep = scanner.nextInt();

		sportvereniging.addGroepaanLid(nrLid - 1, nrGroep - 1);
		
	}

	private void addLid() {
		System.out.println("Voer naam, adres in");
		String naam = scanner.next();
		String adres = scanner.next();

		Lid lid = new Lid();
		lid.setNaam(naam);
		lid.setAdres(adres);
		sportvereniging.addLid(lid);
	}

	private void showLeden() {
		ArrayList<Lid> leden = sportvereniging.getLeden();

		System.out.println("Leden");
		for (Lid lid : leden) {
			System.out.println(lid.getOmschrijving());
		}

	}

	private void vereningingMenu() {
		System.out.println("---=Vereniging=---");
		System.out.println("1) Vastgoed	Lijst");
		System.out.println("2) Vastgoed	Toevoegen");

		switch (scanner.nextInt()) {
		case 1:
			showVastgoed();
			break;
		case 2:
			addVastgoed();
			break;
		}
	}

	private void reserveringMenu() {
		System.out.println("---=Vereniging=---");
		System.out.println("1) Overzicht reserveringen");
		System.out.println("2) Vastgoed	reserveren");
		System.out.println("3) Materiaal reserveren");

		switch (scanner.nextInt()) {
		case 1:
			showReservering();
			break;
		case 2:
			vastgoedReserveren();
			break;
		}
	}

	private void showReservering() {
		ArrayList<Reservering> reserveringen = sportvereniging
				.getReserveringen();

		System.out.println("Reserveringen");
		for (Reservering reservering : reserveringen) {
			System.out.println(reservering.toString());
		}
		scanner.next(); // end
	}

	private void vastgoedReserveren() {
		SimpleDateFormat sdf = new SimpleDateFormat("dd-mm-yyyy_HH:mm:ss");

		System.out
				.println("vastgoed id, begintijd, eindtijd (dd MM yyyy HH:mm:ss)");
		int id = scanner.nextInt();
		Date beginTijd = null;
		Date eindTijd = null;

		try {
			beginTijd = sdf.parse(scanner.next());
			eindTijd = sdf.parse(scanner.next());

		} catch (ParseException e) {
			e.printStackTrace();
		}

		VastgoedReserveren vastgoedReserveren = new VastgoedReserveren(
				sportvereniging.getVastgoed().get(id - 1));

		sportvereniging.addReservering(vastgoedReserveren.reserveer(beginTijd,
				eindTijd));
	}

	private void showVastgoed() {
		ArrayList<Vastgoed> vastgoed = sportvereniging.getVastgoed();
		int i = 1;
		System.out.println("ID \t NAAM \t\t PRIJS");
		for (Vastgoed item : vastgoed) {
			System.out.println(i + "\t" + item.getNaam() + "\t"
					+ item.getKosten());
			i++;
		}
		scanner.next();
	}

	private void addVastgoed() {
		System.out.println("Voer type, naam en prijs in");
		String type = scanner.next();
		String naam = scanner.next();
		double kosten = scanner.nextDouble();

		sportvereniging.addVastGoed(type, naam, kosten);
	}
}
